home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Visual Database / Visual Foxpro 6.0 (Ent. Edition) / Vf6ent Extractor.EXE / TOOLS / XSOURCE / XSOURCE.ZIP / vfpsource / Builders / wbgrid.prg < prev    next >
Encoding:
Text File  |  1998-05-01  |  7.3 KB  |  290 lines

  1. * Class definition for columns added to grids in builders. This gives columns
  2. * added via the AddColumn method a common set of methods, e.g. to trap resizing.
  3.  
  4. #DEFINE C_SANSSERIF_LOC        "MS Sans Serif"
  5.  
  6. DEFINE CLASS wbGrid AS GRID
  7.     Name = "Grid1"
  8.     Height = 135
  9.     Width = 412
  10.     RecordMark = .f.
  11.     DeleteMark = .f.
  12.     Highlight = .f.
  13.     Gridlines = 2
  14.     Scrollbars = 3
  15.     *- Backcolor = RGB(192,192,192)
  16.     HeaderHeight = 19
  17.     BuilderSource = ""
  18.     
  19.     
  20.     PROCEDURE INIT
  21.         PARAMETERS DSType, DS, BldrSource, numcols
  22.  
  23.         * THIS.RecordSourcetype = DSType
  24.         THIS.RecordSource = DS
  25.         THIS.BuilderSource = IIF(TYPE("BldrSource") = "C", UPPER(BldrSource), "")
  26.         numcols = IIF(TYPE("numcols") = "N", numcols, 0)
  27.         
  28.         THIS.ColumnCount = 0
  29.         PRIVATE m.wbi, m.thiscol
  30.         
  31.         FOR m.wbi = 1 TO numcols
  32.             m.thiscol = "Column" + LTRIM(STR(m.wbi))
  33.             THIS.AddObject(m.thiscol,"wbCol")                && add the column
  34.             
  35.             THIS.&thiscol..Text1.FontBold = .f.
  36.             
  37.             * wbaCols[,5] and [,6] record current control name and type - add it if other than textbox and if it's one
  38.             * of our supported control types. Page 3 activate will set CurrentControl to this object.
  39.             
  40.             IF THIS.BuilderSource = "GRID" AND TYPE("wbaCols[m.wbi,5]") = "C" AND TYPE("wbaCols[m.wbi,6]") = "C"
  41.                 IF "." + LOWER(wbaCols[m.wbi,6]) + "." $ ".editbox.spinner.checkbox.oleboundcontrol."
  42.                     THIS.&thiscol..AddObject(wbaCols[m.wbi,5],wbaCols[m.wbi,6])
  43.                 ENDIF
  44.             ENDIF
  45.         ENDFOR
  46.                 
  47.     ENDPROC
  48.  
  49.     PROCEDURE SetListWidths
  50.         PRIVATE m.cWidths, m.iWidth, m.widthnum, m.ipad, m.wbi
  51.         
  52.         m.cWidths = ""
  53.         m.iWidth = 0
  54.  
  55.         FOR m.wbi = 1 TO THISFORMSET.wbiColumns
  56.             m.widthnum = wbaCols[m.wbi, 1] / THISFORMSET.GridMetric            && number of chars of data in p.3 grid
  57.             m.cWidths = m.cWidths + LTRIM(STR(m.widthnum)) + ","
  58.             m.iWidth = m.iWidth + m.widthnum
  59.         ENDFOR
  60.         IF RIGHT(m.cWidths, 1) = ","
  61.             m.cWidths = LEFT(m.cWidths, LEN(m.cWidths) - 1)
  62.         ENDIF
  63.  
  64.         THISFORMSET.SetWidthString(m.cWidths)
  65.         IF THIS.PARENT.wizcheckbox1.Value = 1
  66.             THISFORMSET.SetControlWidth(m.iWidth)
  67.         ENDIF
  68.     ENDPROC
  69.     
  70.  
  71.     PROCEDURE SetGridWidths
  72.         PRIVATE m.thiscol, m.iWidth, m.wbi
  73.  
  74.         FOR m.wbi = 1 TO ALEN(wbaCols,1)
  75.             m.thiscol = wbaCols[m.wbi,7]        && control's real column name
  76.             m.bldrchars = wbaCols[m.wbi, 1] / THISFORMSET.BldrMetric
  77.             m.widthnum = THISFORMSET.SetColWidth(m.bldrchars,wbaControl[1].&thiscol)
  78.             wbaControl[1].&thiscol..Width = m.widthnum
  79.         ENDFOR
  80.     ENDPROC
  81.     
  82.  
  83.     PROCEDURE AfterRowcolChange
  84.         PARAMETER ColIndex
  85.  
  86.         IF THIS.BuilderSource = "GRID" AND NOT THISFORMSET.KeepColumn
  87.         
  88.             THISFORMSET.ActiveCol = ALLTRIM(THIS.Columns[m.ColIndex].Name)
  89.             THISFORMSET.ActiveColNum = m.ColIndex
  90.             m.currctrl = THIS.Columns[m.ColIndex].CurrentControl
  91.             IF NOT EMPTY(m.currctrl)
  92.                 m.currtype = THIS.Columns[m.ColIndex].&currctrl..baseclass
  93.             ELSE
  94.                 m.currtype = "textbox"
  95.             ENDIF
  96.             
  97.             THIS.PARENT.Wiztextbox1.Value = wbaCols[m.ColIndex,3]
  98.             THIS.PARENT.Wiztextbox1.Refresh
  99.             
  100.             * Make combobox of control types appropriate for this column 
  101.             m.setctrl = IIF(LOWER(m.currctrl) = wbaCols[m.ColIndex,10], wbaCols[m.ColIndex,11], m.currctrl)
  102.             m.fldtype = wbaCols[m.ColIndex,4]
  103.             m.newindex = THISFORMSET.SetControls(m.fldtype, m.setctrl)
  104.             m.newrows = ""
  105.             m.nCtrls = ALEN(THISFORMSET.wbaCtrlShow,1)
  106.             FOR m.wbi = 1 TO m.nCtrls
  107.                 m.newrows = m.newrows + THISFORMSET.wbaCtrlShow[m.wbi,1] + ","
  108.             ENDFOR
  109.             IF RIGHT(m.newrows,1) = ","
  110.                 m.newrows = LEFT(m.newrows,LEN(m.newrows)-1)
  111.             ENDIF
  112.             WITH THIS.PARENT.Wizcombobox1
  113.                 .RowSource = LEFT(m.newrows,240)
  114.                 .NumberOfElements = m.nCtrls
  115.                 .Listindex = m.newindex
  116.             ENDWITH
  117.         ENDIF        
  118.  
  119.     ENDPROC
  120.     
  121.     PROCEDURE ERROR
  122.  
  123.         PARAMETERS nError, cMethod, nLine
  124.  
  125.         PRIVATE oTopmost, m.msg
  126.  
  127.         m.msg = MESSAGE()
  128.  
  129.         m.oTopmost = THIS
  130.  
  131.         DO WHILE TYPE('m.oTopmost.Parent') = 'O'
  132.             m.oTopmost = m.oTopmost.Parent
  133.         ENDDO
  134.  
  135.         oTopmost.Error(m.nError, m.cMethod, m.nLine, m.msg)
  136.  
  137.         IF THISFORMSET.lRetry
  138.             RETRY
  139.         ENDIF
  140.     
  141.     ENDPROC
  142.  
  143. ENDDEFINE
  144.  
  145.  
  146. DEFINE CLASS wbCol AS COLUMN
  147.     Width = m.wbiDefWidth
  148.     FontName = C_SANSSERIF_LOC
  149.     FontSize = 8
  150.     FontBold = .f.
  151.     Movable = .f.
  152.     
  153.     ADD OBJECT HEADER1 AS wbHeader
  154.     
  155.     PROCEDURE WHEN
  156.         RETURN .f.
  157.     ENDPROC
  158.  
  159.     PROCEDURE Resize
  160.         * Column number involved maps into THISFORMSET.wbFieldmap, a bitmap of fields used to 
  161.         * construct column-width string. wbaCols[] array reflects all fields in widths string.
  162.  
  163.         PRIVATE m.wbcThiscol, m.wbiColnum
  164.  
  165.         m.wbiColnum = THIS.ColumnOrder
  166.         
  167.         IF m.wbiColnum > 0
  168.             wbaCols[m.wbiColnum,1] = THIS.Width
  169.             IF UPPER(ALLTRIM(wbaControl[1].BaseClass)) $ "LISTBOX.COMBOBOX"
  170.                 THIS.Parent.SetListWidths
  171.             ENDIF
  172.             IF UPPER(ALLTRIM(wbaControl[1].BaseClass)) == "GRID"
  173.                 THIS.Parent.SetGridWidths
  174.             ENDIF
  175.         ENDIF
  176.     ENDPROC
  177.     
  178.     PROCEDURE ERROR
  179.  
  180.         PARAMETERS nError, cMethod, nLine
  181.  
  182.         PRIVATE oTopmost, m.msg
  183.  
  184.         m.msg = MESSAGE()
  185.  
  186.         m.oTopmost = THIS
  187.  
  188.         DO WHILE TYPE('m.oTopmost.Parent') = 'O'
  189.             m.oTopmost = m.oTopmost.Parent
  190.         ENDDO
  191.  
  192.         oTopmost.Error(m.nError, m.cMethod, m.nLine, m.msg)
  193.  
  194.         IF THISFORMSET.lRetry
  195.             RETRY
  196.         ENDIF
  197.     
  198.     ENDPROC
  199.  
  200. ENDDEFINE
  201.         
  202. DEFINE CLASS wbHeader AS HEADER
  203.     FontName = C_SANSSERIF_LOC
  204.     FontSize = 8
  205.     Caption = " "
  206.     Alignment = 2
  207.  
  208.     PROCEDURE Click
  209.     * Click event for header, for grid builder
  210.  
  211.         oPRef = THIS.PARENT.PARENT
  212.         IF oPRef.BuilderSource = "GRID"
  213.             m.newcol = ALLTRIM(THIS.PARENT.Name)
  214.             m.newcolnum = VAL(STRTRAN(UPPER(m.newcol),"COLUMN"))
  215.             m.currentrow = oPRef.ActiveRow
  216.             oPRef.ActivateCell(m.currentrow,m.newcolnum)    && triggers grid's AfterRowColChange method
  217.         ENDIF
  218.     
  219.     ENDPROC
  220.     
  221.     PROCEDURE ERROR
  222.  
  223.         PARAMETERS nError, cMethod, nLine
  224.  
  225.         PRIVATE oTopmost, m.msg
  226.  
  227.         m.msg = MESSAGE()
  228.  
  229.         m.oTopmost = THIS
  230.  
  231.         DO WHILE TYPE('m.oTopmost.Parent') = 'O'
  232.             m.oTopmost = m.oTopmost.Parent
  233.         ENDDO
  234.  
  235.         oTopmost.Error(m.nError, m.cMethod, m.nLine, m.msg)
  236.  
  237.         IF THISFORMSET.lRetry
  238.             RETRY
  239.         ENDIF
  240.     
  241.     ENDPROC
  242.  
  243.     PROCEDURE DBLCLICK
  244.         IF THIS.PARENT.PARENT.BuilderSource = "LIST"
  245.             PRIVATE m.wbiVisCount, m.wbi, m.wbithiscol, m.wbiColnum
  246.             IF THISFORMSET.wbiColumns = 1                    && don't allow hide of only column
  247.                 RETURN
  248.             ENDIF
  249.             m.wbiVisCount = 0
  250.             FOR m.wbi = 1 TO THISFORMSET.wbiColumns
  251.                 IF wbaCols[m.wbi, 1] > 0
  252.                     m.wbiVisCount = m.wbiVisCount + 1
  253.                 ENDIF
  254.             ENDFOR
  255.             
  256.             * Column number clicked on maps into THISFORMSET.wbFieldmap, a bitmap of fields used to 
  257.             * construct column-width string. wbaCols[] array reflects all fields in widths string.
  258.             
  259.             m.wbcThiscol = THIS.Parent.Name            
  260.             m.wbiColnum = THIS.PARENT.ColumnOrder
  261.             m.wblHideAction = wbaCols[m.wbiColnum,1] > 0    && .T. if hiding, .F. if unhiding
  262.             
  263.             IF m.wbiVisCount = 1 AND m.wblHideAction                && don't allow hide of only remaining visible column
  264.                 RETURN
  265.             ENDIF
  266.  
  267.             * OK to hide this column    
  268.             WITH THIS.PARENT    
  269.                 wbaCols[m.wbiColnum,1] = IIF(m.wblHideAction, 0, .Width)
  270.                 IF .PARENT.BuilderSource = "GRID"
  271.                     .Parent.SetGridWidths
  272.                 ELSE
  273.                     .Parent.SetListWidths
  274.                 ENDIF
  275.                 IF wbaCols[m.wbiColnum,1] = 0
  276.                     .Backcolor = RGB(192,192,192)
  277.                 ELSE
  278.                     IF NOT EMPTY(THISFORMSET.wbaFonts[1,5])
  279.                         .BackColor = THISFORMSET.wbaFonts[1,5]
  280.                     ELSE
  281.                         .BackColor = RGB(255,255,255)
  282.                     ENDIF
  283.                 ENDIF
  284.             ENDWITH
  285.         ENDIF
  286.         THIS.PARENT.Enabled = THIS.PARENT.Enabled
  287.         
  288.     ENDPROC
  289.     
  290. ENDDEFINE